package models

import (
	"behavior_srv/basic/config"
	"time"
)

// VisitRecord 用户访问记录
type BehaviorVisitRecords struct {
	Id           uint64    `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	UserId       int64     `gorm:"column:user_id;type:bigint;comment:用户ID;default:0;" json:"user_id"`            // 用户ID
	UserIp       string    `gorm:"column:user_ip;type:varchar(50);comment:用户IP地址;" json:"user_ip"`               // 用户IP地址
	SessionId    string    `gorm:"column:session_id;type:varchar(100);comment:会话ID;not null;" json:"session_id"` // 会话ID
	Path         string    `gorm:"column:path;type:varchar(255);comment:访问路径;not null;" json:"path"`             // 访问路径
	PageName     string    `gorm:"column:page_name;type:varchar(100);comment:页面名称;" json:"page_name"`            // 页面名称
	VisitTime    time.Time `gorm:"column:visit_time;type:datetime(3);comment:访问时间;not null;" json:"visit_time"`  // 访问时间
	UserAgent    string    `gorm:"column:user_agent;type:text;comment:用户代理;" json:"user_agent"`                  // 用户代理
	Referer      string    `gorm:"column:referer;type:varchar(255);comment:来源页面;" json:"referer"`                // 来源页面
	IsFirstVisit bool      `gorm:"column:is_first_visit;type:tinyint(1);comment:是否首次访问;default:0;" json:"is_first_visit"` // 是否首次访问
	Params       string    `gorm:"column:params;type:text;comment:请求参数;" json:"params"`                          // 请求参数
	CreatedAt    time.Time `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt    time.Time `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt    time.Time `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

// TableName 设置表名
func (v *BehaviorVisitRecords) TableName() string {
	return "behavior_visit_records"
}

// Create 创建访问记录
func (v *BehaviorVisitRecords) Create() error {
	return config.DB.Create(v).Error
}

// BatchCreate 批量创建访问记录
func (v *BehaviorVisitRecords) BatchCreate(records []*BehaviorVisitRecords) error {
	return config.DB.CreateInBatches(records, 100).Error
}
